// UserDao.h
#ifndef USERDAO_H
#define USERDAO_H

#include <QtSql/QSqlDatabase>
#include <optional>
#include <QDateTime>
#include "entity/SysUser.h"

// 用户数据结构体（可根据实际表结构扩展）
struct UserData
{
    QString id;
    QString account;
    QString password;
    QString name;
    QDateTime lastLoginTime;
    QString userStatus;
};

class UserDao
{
public:
    /**
     * @brief 构造函数注入会话
     * @param sql 数据库会话引用（生命周期由DatabaseManager管理）
     */
    explicit UserDao(QSqlDatabase& db);

    /**
     * @brief 根据用户名查询用户信息
     * @param username 用户名
     * @return optional包装的用户数据，查询失败返回std::nullopt
     */
    static std::optional<UserData> findByUsername(QSqlDatabase& db, const QString& username);
    /**
     * @brief 更新用户最后登录时间
     * @param username 用户名
     * @return 是否更新成功
     */
    static std::optional<SysUser> getUserById(QSqlDatabase& db, const QString& userId);
    static bool updateLoginInfo(QSqlDatabase& db, QString userId, const QString& ip,
                                const QString& address, const QString& device);
    static bool updateLoginTime(QSqlDatabase& db, const QString& username);

private:
    QSqlDatabase& db_; // 非拥有引用
};

#endif // USERDAO_H
